iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 18
1
Modern Web

Chrome Extension 開發與實作系列 第 18

Chrome Extension 開發與實作 18- 書籤操作 bookmarks API

  • 分享至 

  • xImage
  •  

Chrome的書籤API允許你操作使用者的書籤,整個書籤清單會以樹狀物件提供給開發人員操作。

書籤物件

bookmarks.BookmarkTreeNode

代表書籤樹中的一個節點(書籤或資料夾),包含以下資訊:

  • id:節點的辦識符。
  • title:顯示文字。
  • parentid(可選):父節點的辦識符。
  • index(可選):該節點在文件夾中的位置。(從0開始)
  • url(可選):網址,如果節點代表的是文件夾則無此屬性。
  • dateAdded(可選):創建節點的時間。
  • dateGroupModified(可選):上一次修改節點的時間。
  • unmodifiable(可選):bate版本屬性,表示該節點不可修改的原因。(系統管理員配置的書籤)
  • children(可選):該節點的所有子節點(已排序),內容是由BookmarkTreeNode物件組成的陣列。

要注意,一個節點如果擁有url他就是一個書籤,如果擁有children則代表他是一個資料夾。

注意:

  • 不可刪除根節點。
  • 不可刪除Chrome預設的書籤夾,例如:書籤欄,其他書籤。

書籤操作-創造書籤

chrome.bookmarks.create(object bookmark, function callback)

傳入新增的書籤物件:

  • string (optional) parentId 預設值是bookmark資料夾
  • integer (optional) index
  • string (optional) title
  • string (optional) url

如果有指定回調,回調中會提供你創建完的BookmarkTreeNode。

官網程式碼範例中的節錄:

$('#addlink').click(function() {
    $('#adddialog').empty().append(edit).dialog({
        autoOpen: false,
        closeOnEscape: true,
        title: 'Add New Bookmark',
        modal: true,
        buttons: {
            'Add': function() {
                chrome.bookmarks.create({
                    parentId: bookmarkNode.id,
                    title: $('#title').val(),
                    url: $('#url').val()
                });
                $('#bookmarks').empty();
                $(this).dialog('destroy');
                window.dumpBookmarks();
            },
            'Cancel': function() {
                $(this).dialog('destroy');
            }
        }
    }).dialog('open');
});

書籤操作-取得書籤

取得指定書籤

chrome.bookmarks.get(string or array of string idOrIdList, function callback)回來的書籤清單已經過排序
  • idOrIdList:可以使用字串或是字串的陣列指定要取得的書籤節點。

官網程式碼範例中的節錄:

function dumpBookmarks(query) {
    var bookmarkTreeNodes = chrome.bookmarks.getTree(
        function(bookmarkTreeNodes) {
            $('#bookmarks').append(dumpTreeNodes(bookmarkTreeNodes, query));
        });
}

取得資料夾裡的書籤:

chrome.bookmarks.getChildren(string id, function callback)

取得最近新增的書籤

chrome.bookmarks.getRecent(integer numberOfItems, function callback)
  • numberOfIttems:可指定希望回傳書籤的最大數量。

取得整個書籤樹

chrome.bookmarks.getTree(function callback)

取得某個書籤樹的子樹

chrome.bookmarks.getSubTree(string id, function callback)

所有取得方式都很像,歸納方法是:如果方法名稱不包含tree這個關鍵字,則該方法只取得節點本身,回傳值的所有節點物件不含子節點(children)。(如下圖)

http://ithelp.ithome.com.tw/upload/images/20170101/200794508w662LMChD.png

書籤操作-更新書籤

chrome.bookmarks.update(string id, object changes, function callback)

只需傳入想修改的屬性,不指定的不會更該,目前只接受id及url屬性。

官網程式碼範例中的節錄:

$('#editlink').click(function() {
    edit.val(anchor.text());
    $('#editdialog').empty().append(edit).dialog({
        autoOpen: false,
        closeOnEscape: true,
        title: 'Edit Title',
        modal: true,
        show: 'slide',
        buttons: {
            'Save': function() {
                chrome.bookmarks.update(String(bookmarkNode.id), {
                    title: edit.val()
                });
                anchor.text(edit.val());
                options.show();
                $(this).dialog('destroy');
            },
            'Cancel': function() {
                $(this).dialog('destroy');
            }
        }
    }).dialog('open');
});

書籤操作-移動書籤

chrome.bookmarks.move(string id, object destination, function callback)
  • destination 參數:指定想要移動的節點id。

書籤操作-查詢書籤

chrome.bookmarks.search(string or object query, function callback)
  • query 使用字串:可以是字串,用來指定查詢的字串,自動匹配網址與標題,也可以使用物件來指定查詢的細節:

Chrome官網關於查詢的說明太少,有興趣深究的,可以參考Mozilla Weeb xtension開發文件的bookmarks.search() API,說不定會有幫助。

書籤操作-刪除書籤

刪除書籤或空資料夾

chrome.bookmarks.remove(string id, function callback)

字面上是只允許刪除空的資料夾,也就是有子元素的話會回報錯誤訊息:Unchecked runtime.lastError while running bookmarks.remove: Can't modify the root bookmark folders.

刪除有書籤的資料夾

遞回的進行,刪除整個整子樹。

chrome.bookmarks.removeTree(string id, function callback)

事件

  • onCreated:書籤或資料夾被創造時發生。
  • onRemoved:書籤或資料夾被刪除時發生。
  • onChanged:書籤或資料夾更新時發生,目前只有Title及URL的變更才會觸發。
  • onMoved:一個書籤或資料夾移動到另一個資料夾中發生。
  • onChildrenReordered:子節點的順序在使用者介面中被調動順序產生,但使用程式碼的move方法不會觸發該事件。
  • onImportBegan:開始導入書籤。
  • onImportEnded:書籤的導入事件結束。

小結

有了書籤的管理工具我們能作些什麼呢?

  • 我們可以開發替代頁面,代替使用者的書籤管理頁面,以提供更好的整理方式,例如:使用心智圖的方式去管理你的書籤。
  • 我們能拉出書籤的樹狀圖,使用Chrome的地端儲存API為書籤儲存多餘的欄位,以便為書籤提供更好的查詢方式。例如:下tag,又或是根據網站的內容自動作分類。

參考

https://crxdoc-zh.appspot.com/extensions/bookmarks
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/bookmarks/search
https://crxdoc-zh.appspot.com/extensions/bookmarks#method-search


上一篇
Chrome Extension 開發與實作 17-chrome.alarms 定時器API
下一篇
Chrome Extension 開發與實作 19-chrome.downloads API 使用腳本管理下載
系列文
Chrome Extension 開發與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言